// 一\全局作用域:
// 浏览器环境有一个顶层对象 window,其属性和var的全局变量等价
// 如果是window对象的内置属性,则输出默认值,而非内置则为undefined
// var 如果设置了window对象的内置属性作为变量,会直接覆盖

// console.log(window.name);//空. 内置属性
// console.log(window.acdfewfwef);//undefined ,非内置属性

// console.log(name);//空. 内置属性
// console.log(acdfewfwef);//报错

// console.log(window.name===name);//true

// var value=10;
// console.log(window.value);//var的全局变量即为window的属性

// var name="李晨好事华日嗯";
// console.log(window.name);//内置属性被覆盖


//  二\块级作用域
// 1.es6之前只有全局,函数作用域,并没有块级作用域;
// 2.{}块级作用域
// 3.如果在块级作用域不使用let,就会造成全局变被污染的问题
// 4.{{{}}}作用域支持多层嵌套,每一层都是封闭的
// {{{{
//     {let value=10;}
//     console.log(value);//报错
// }}}}


// 5.在es6之前,采用立即执行匿名函数的方式防止变量污染
// (function (){
//     var value=10
// }())
// console.log(value);

// 6.块级作用域内的函数声明,还是可以在全局访问
// {
//     function fn(){
//         console.log("块级函数");
//     }
// }
// fn();

// 推荐使用函数表达式的方式去构建函数
{
    let fn=function(){
        console.log("块级函数");
    }
    fn()
} 


